﻿#pragma once

#include <breaking/time/time.h>

namespace breaking
{
	/**
	 * @brief 日志优先级
	 */
	enum log_priority
	{
		LOG_DEV,				// 开发
		LOG_DEBUG,				// 调试
		LOG_TRACE,				// 跟踪
		LOG_INFO,				// 记录
		LOG_WARN,				// 警告
		LOG_ERROR,				// 错误
		LOG_FATAL,				// 崩溃
		LOG_SYSTEM,				// 系统

		LOG_MAX					// 最大
	};

	/**
	 * @brief 日志优先级名字
	 */
	const static char* LOG_PRIORITY_NAME[] = {
		"dev",
		"debug",
		"trace",
		"info",
		"warn",
		"error",
		"fatal",
		"system"
	};

	/**
	 * @brief 获取日志优先级名字
	 * @param priority
	 * @return
	 */
	inline const char* get_log_priority_name(log_priority priority)
	{
		if (priority >= LOG_MAX) return nullptr;
		return LOG_PRIORITY_NAME[priority];
	}

	struct log_event
	{
	public:
		log_event() : priority(LOG_DEBUG)
		{
		}
		~log_event() {}

		// 日志时间
		time				log_time;
		// 日志优先级
		log_priority		priority;
		// 日志内容
		std::string			message;
	};
}